↳ Prolog
↳ PrologToPiTRSProof
perm1_in(Xs, .(X, Ys)) → U1(Xs, X, Ys, select_in(X, Xs, Zs))
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
U1(Xs, X, Ys, select_out(X, Xs, Zs)) → U2(Xs, X, Ys, perm1_in(Zs, Ys))
perm1_in([], []) → perm1_out([], [])
U2(Xs, X, Ys, perm1_out(Zs, Ys)) → perm1_out(Xs, .(X, Ys))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm1_in(Xs, .(X, Ys)) → U1(Xs, X, Ys, select_in(X, Xs, Zs))
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
U1(Xs, X, Ys, select_out(X, Xs, Zs)) → U2(Xs, X, Ys, perm1_in(Zs, Ys))
perm1_in([], []) → perm1_out([], [])
U2(Xs, X, Ys, perm1_out(Zs, Ys)) → perm1_out(Xs, .(X, Ys))
PERM1_IN(Xs, .(X, Ys)) → U11(Xs, X, Ys, select_in(X, Xs, Zs))
PERM1_IN(Xs, .(X, Ys)) → SELECT_IN(X, Xs, Zs)
SELECT_IN(X, .(Y, Xs), .(Y, Zs)) → U31(X, Y, Xs, Zs, select_in(X, Xs, Zs))
SELECT_IN(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN(X, Xs, Zs)
U11(Xs, X, Ys, select_out(X, Xs, Zs)) → U21(Xs, X, Ys, perm1_in(Zs, Ys))
U11(Xs, X, Ys, select_out(X, Xs, Zs)) → PERM1_IN(Zs, Ys)
perm1_in(Xs, .(X, Ys)) → U1(Xs, X, Ys, select_in(X, Xs, Zs))
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
U1(Xs, X, Ys, select_out(X, Xs, Zs)) → U2(Xs, X, Ys, perm1_in(Zs, Ys))
perm1_in([], []) → perm1_out([], [])
U2(Xs, X, Ys, perm1_out(Zs, Ys)) → perm1_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM1_IN(Xs, .(X, Ys)) → U11(Xs, X, Ys, select_in(X, Xs, Zs))
PERM1_IN(Xs, .(X, Ys)) → SELECT_IN(X, Xs, Zs)
SELECT_IN(X, .(Y, Xs), .(Y, Zs)) → U31(X, Y, Xs, Zs, select_in(X, Xs, Zs))
SELECT_IN(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN(X, Xs, Zs)
U11(Xs, X, Ys, select_out(X, Xs, Zs)) → U21(Xs, X, Ys, perm1_in(Zs, Ys))
U11(Xs, X, Ys, select_out(X, Xs, Zs)) → PERM1_IN(Zs, Ys)
perm1_in(Xs, .(X, Ys)) → U1(Xs, X, Ys, select_in(X, Xs, Zs))
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
U1(Xs, X, Ys, select_out(X, Xs, Zs)) → U2(Xs, X, Ys, perm1_in(Zs, Ys))
perm1_in([], []) → perm1_out([], [])
U2(Xs, X, Ys, perm1_out(Zs, Ys)) → perm1_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
SELECT_IN(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN(X, Xs, Zs)
perm1_in(Xs, .(X, Ys)) → U1(Xs, X, Ys, select_in(X, Xs, Zs))
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
U1(Xs, X, Ys, select_out(X, Xs, Zs)) → U2(Xs, X, Ys, perm1_in(Zs, Ys))
perm1_in([], []) → perm1_out([], [])
U2(Xs, X, Ys, perm1_out(Zs, Ys)) → perm1_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
SELECT_IN(X, .(Y, Xs), .(Y, Zs)) → SELECT_IN(X, Xs, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
SELECT_IN(.(Y, Xs)) → SELECT_IN(Xs)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
PERM1_IN(Xs, .(X, Ys)) → U11(Xs, X, Ys, select_in(X, Xs, Zs))
U11(Xs, X, Ys, select_out(X, Xs, Zs)) → PERM1_IN(Zs, Ys)
perm1_in(Xs, .(X, Ys)) → U1(Xs, X, Ys, select_in(X, Xs, Zs))
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
U1(Xs, X, Ys, select_out(X, Xs, Zs)) → U2(Xs, X, Ys, perm1_in(Zs, Ys))
perm1_in([], []) → perm1_out([], [])
U2(Xs, X, Ys, perm1_out(Zs, Ys)) → perm1_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
PERM1_IN(Xs, .(X, Ys)) → U11(Xs, X, Ys, select_in(X, Xs, Zs))
U11(Xs, X, Ys, select_out(X, Xs, Zs)) → PERM1_IN(Zs, Ys)
select_in(X, .(Y, Xs), .(Y, Zs)) → U3(X, Y, Xs, Zs, select_in(X, Xs, Zs))
select_in(X, .(X, Xs), Xs) → select_out(X, .(X, Xs), Xs)
U3(X, Y, Xs, Zs, select_out(X, Xs, Zs)) → select_out(X, .(Y, Xs), .(Y, Zs))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
PERM1_IN(Xs) → U11(select_in(Xs))
U11(select_out(X, Zs)) → PERM1_IN(Zs)
select_in(.(Y, Xs)) → U3(Y, select_in(Xs))
select_in(.(X, Xs)) → select_out(X, Xs)
U3(Y, select_out(X, Zs)) → select_out(X, .(Y, Zs))
select_in(x0)
U3(x0, x1)
PERM1_IN(Xs) → U11(select_in(Xs))
select_in(.(X, Xs)) → select_out(X, Xs)
U3(Y, select_out(X, Zs)) → select_out(X, .(Y, Zs))
POL(.(x1, x2)) = 2 + x1 + 2·x2
POL(PERM1_IN(x1)) = 2 + 2·x1
POL(U11(x1)) = 2·x1
POL(U3(x1, x2)) = 2 + x1 + 2·x2
POL(select_in(x1)) = x1
POL(select_out(x1, x2)) = 1 + x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
U11(select_out(X, Zs)) → PERM1_IN(Zs)
select_in(.(Y, Xs)) → U3(Y, select_in(Xs))
select_in(x0)
U3(x0, x1)